; Hitec EC2400 modem driver                         Version 0.06 25-Feb-1991
; (c) 1990/1991 Hugo Fiennes
; modified 10th Dec 1990 by Paul Vigay

modem_initialise ()
  {
  integer oldtx=port_txspeed(),oldrx=port_rxspeed()

  port_rxclear()
  port_txspeed(9600)
  port_rxspeed(9600)

  type "AT"+cr
  pause(50)
  port_rxclear()
  type "ATE0QV1S0=0X4F0&D2&C1&I1B0&S0\Q2"+cr
  if (waitfor("OK",150))
    {
    port_txspeed(oldtx)
    port_rxspeed(oldrx)
    return(0)
    }

  port_txspeed(oldtx)
  port_rxspeed(oldrx)
  type "AT"+cr
  return(1)
  }

modem_shutdown ()
  {
  return(1)
  }

modem_connect ()
  {
  port_dtr(1)
  port_rts(1)
  type "ATO"+cr

  return(_processmessage(""))
  }

modem_disconnect ()                   
  {
  port_rts(0)
  port_dtr(0)
  pause 50
  port_dtr(1)
  port_rts(1)
  type cr
  type "ATE0QV1S0=0X3F&D2&C1&I1B&S\Q2"+cr
  waitfor("OK",150)
  type "AT"+cr
  }

modem_dial (string number[40],integer how)
  {
  string dialtype[1]

  port_dtr(1)
  port_rts(1)
  port_rxclear()

  if (how==0)
    {
    dialtype="P"
    }
  else
    {
    dialtype="T"
    }
  type "ATD"+dialtype+number+cr
  return(_processmessage(""))
  }

modem_answer ()
  {
  string response[30]

  port_txspeed(9600)
  port_rxspeed(9600)
  type "ATS0=1"+cr

  repeat
    {
    response=$modeminput(30,modem_replywait)
    }
  until(strcmp($left(response,7),"CONNECT")==0)

  return(_processmessage(response))
  }

modem_errorcontrol (string option[10])
  {
  set(linklevel,none)

  if (comparei(option,"off"))
    {
    type("AT\N1%C0"+cr)
    }
   
  if (comparei(option,"vasscom"))
    {
    type "AT\N1%C0"+cr
    set(linklevel,vasscom)
    }

  if (comparei($left(option,3),"mnp"))
    {
    integer level=val($mid(option,4,1))
    if (level=5)
      {
      type("AT\N2%C1"+cr)
      }
    if (level=4)
      {
      type("AT\N2%C0"+cr)
      }
    if (level<4)
      {
      type("AT\N1%C0"+cr)
      set(linklevel,mnp)
      }
    }

  waitfor("OK"+$chr(13)+$chr(10),100)
  pause(50)
  }

modem_standard (string option[10])
  {
  }

_processmessage (string already[30])
  {
  string retcode[30]

  if (len(already)==0)
    {
    ; Wait for message
    repeat
      {
      retcode=$modeminput(30,modem_replywait)
      }
    until((compare(retcode,"RING")==0) && (compare($left(retcode,6),"TRYING")==0) && (len(retcode)!=0))
    }
  else
    {
    retcode=already
    }

  prints retcode+newline

  ; Check for NO DIALTONE/BLACKLISTED/BUSY
  switch(retcode)
    {
    case$("BUSY")
      {
      return(2)
      }
    case$("NO DIALTONE")
      {
      return(3)
      }
    case$("BLACKLISTED")
      {
      return(4)
      }
    }

  if ((compare($left(retcode,7),"CONNECT")!=0) || (compare($left(retcode,4),"V.23")!=0))
    {
    return(0)
    }
  modem_disconnect()
  return(1)
  }
